pbN}쐬L^

EAvbg쐬JApplet(SWING)pč쐬

EC^[tFCXƂč쐬̂́ARunnableAKeyListenerAMouseListenerAActionListenerB
  Runnable       c XbhgpꍇɕKv
  KeyListener    c L[͂sꍇɕKv
  MouseListener  c }EXsꍇɕKv
  ActionListener c ʏɔzu{^Ȃǂ̑sꍇɕKv

  C^[tFCXgpꍇ́Aꂼ̃\bhSĂLqȂ΂ȂB
    gp̏ꍇ͋֐ł̂ŎKv

ElŒ肳Ă̂ɕtĂ finalqĐ錾sB

E摜 ImageNXŕϐ錾AApplet.getImage()\bhœǂݍ(݂͂߂)
  ۂɓǂݍ݊oĂł͂Ȃ̂Œӂ邱ƁB
  ǂݍ݊܂ő҂@ MediaTracker NX̃CX^X쐬AaddImage\bh ImageCX^XƔԍo^邱Ƃɂ
  waitForAll()\bhœo^Image̓ǂݍ݊܂ő҂Ƃ\ƂȂB
  webɍڂꍇɂ͕KvȏƎv

EKvȃ\bhꗗ
  init              c Avbg̋NɈxs
                       ȉ̏ɕKvȕϐ̏ȂǂsB
  run               c Xbh̃CLqB
                       [v Sleep(Nmsec)LqȂꍇCPUp[g؂ƎɂȂ̂
                       ӂKvB
  start             c Avbg̎sJnƂɎsB
  stop              c AvbgI鎞Ɏs
  update            c repaint()ĂяoꂽɂR[B
                       ftHgupdate()\bh͔wiFŔwiShԂĂpaint\bhsĂ̂ł̌
                       Ȃ邽߁AA^CXVAv̏ꍇ́Aupdate\bh͔wi`悵Ȃ悤ɃI[o[ChĂƁB
  paint             c Avbg̉ʕ`掞ɌĂяo
                       WindowXVꂽɕsɌĂяôłĂ΂邩Ȃ
                         ̃\bh̎sɌĂяoƂR[h̏͂mfȂ̂Œӂ邱ƁB
                         ȂGraphicsCX^Xɑ΂ĕ`sƂɔׁA_uobt@O(q)sǂB

  EActionListenerC^[tFCXgp̎ 
    actionPerformed c 

  EKeyListenerC^[tFCXgp̎ 
    keyTyped        c 
    keyPressed      c 
    keyReleased     c 

  EMouseListenerC^[tFCXgp̎ 
    mouseEntered    c }EXR|[lg̒ɓ̏LqB 
    mouseExited     c }EXR|[lg̊OɏȍLqB 
    mousePressed    c }EXE{^ꂽ̏LqB 
    mouseReleased   c }EXE{^ꂽ̏LqB 
    mouseClicked    c 

E_uobt@O
  wi`恨eLN^`sƂB
  ̑΍ƂĖ{@B

  ₱lɂ邪A̓IȎ@͈ȉ̗lɊȒPł

  init\bhȂǂŁAwiƓTCYImageCX^X쐬
  >  Image DoubleBuffer = this.createImage( TCY, cTCY );

  paint\bh̕`ȉ̂悤ɒu 

  ύXO 
  public void paint( Graphics g )
  {
    g.drawImage( wiImageCX^X, 0, 0, Width, Height, this );
    g.drawImage( LN^@ImageCX^X, X1, Y1, Width, Height, this );
    g.drawImage( LN^AImageCX^X, X2, Y2, Width, Height, this );
  }

  ύX 
  // initŐ_uobt@OpImageCX^Ẍꊇ]s 
  public void paint( Graphics g )
  {
      // _uobt@̓]݂̂s 
      g.drawImage( DoubleBuffer, 0, 0, this ); 
  }

  // paint\bh̖OύXāA`揈u(ĂяoƂu)
  public void game_paint( Graphics g )
  {
    g.drawImage( wiImageCX^X, 0, 0, Width, Height, this );
    g.drawImage( LN^@ImageCX^X, X1, Y1, Width, Height, this );
    g.drawImage( LN^AImageCX^X, X2, Y2, Width, Height, this );
  }

ETEh(P̗]n͂Ǝv)
  AudioClipNXgpB
  ߋ̃o[W *.aut@Cgp邱ƂłȂAJAVA2ȍ~ł
  newAudioClip()\bhV݂ꂽ̂ MIDI/WAVt@CĐł悤ɂȂB

  EobNOEhĐ

    // StringŃTEht@Cw肷邾ŗǂ 
    AudioClip ac = getAudioClip( getDocumentBase(), "./resource/start.au" );

    // URLIuWFNgŎw肵Ȃ΂Ȃ 
    URL url = new URL( getDocumentBase(), "./resource/start.wav" );
    AudioClip ac = Applet.newAudioClip( url );

    Đ@
      ac.start() c TEhJn 
      ac.loop()  c TEhJԂJn 
      ac.stop()  c TEh~ 

  EAĐ
      t@C珇ǂݍ݂Xg[~OĐ鎖ɂA
      ~҂Ƃ\ƂȂB
      ̂ɂĂ͂悭Ȃ̂łł͌Ȃ

		final int EXTERNAL_BUFFER_SIZE = 128000;

		try {
			// URLNX̃CX^X𐶐
			URL musicurl = new URL( getDocumentBase(), FileName );
			// I[fBI̓Xg[擾܂
			AudioInputStream audioInputStream = AudioSystem.getAudioInputStream( musicurl );
			// I[fBI`擾܂
			AudioFormat audioFormat = audioInputStream.getFormat();

			// f[^C̏IuWFNg𐶐܂
			DataLine.Info info = new DataLine.Info( SourceDataLine.class, audioFormat );

			// w肳ꂽf[^CɈv郉C擾܂
			SourceDataLine line = (SourceDataLine) AudioSystem.getLine( info );

			// w肳ꂽI[fBI`ŃCJ܂
			line.open( audioFormat );
			line.start();

			int nBytesRead = 0;
			byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];

			while (nBytesRead != -1) {
				// I[fBIXg[f[^ǂݍ݂܂
				nBytesRead = audioInputStream.read(abData, 0, abData.length);
				if (nBytesRead >= 0)
					line.write(abData, 0, nBytesRead);
			}
			// CL[ɓĂf[^ro܂
			line.drain();
			// C܂
			line.close();
		}
		catch ( Exception e )
		{
			e.printStackTrace();
			System.out.print( "Don't Play Music!\n[" + e + "]\n" );
		}

  ETEht@C̎w@
    ꌩ FileIuWFNgōs΂悤Ɍ邪AuEŰNs
    t@CANZXG[ăt@CANZXoȂȂA
    ȂȂBꍇɂĂNullPointerExceptionB

    URLIuWFNgł̎wɂ΁A{͔ȂȂ鎖͊mFB

EOtBbN̉]^]^Wn
  
  ]`悳ꍇAʍl@ƂĂ͕`悵LN^]ĕ`悷ƌl
  l邪AJAVAAWTł̕`̏ꍇ̍l͔ɈقȂB
  ]̂́A`悷LN^ł͖`̃LoX]ƂłB
  ܂AEXOx]ꍇ́ALoX(wi)XOx]ĂLN^`悵A
  EXOx]Čɖ߂ƌƂKvɂȂB
  ̕`n̏́AC^[lbg̎𒲂ׂƊeLA(Docomo)ɃNXgĂA
  Q[ŎguXvCgvƂLN^`NXpӂĂ炵B

  drawImageŎw肷WńAftHgŃEBhË̍オ_(0,0)ɂȂĂB
  ]sƂ́Ǎ_ɌvẐŁALN^Ȃǂ̕`ς
  LN^̒Sʒu_ɕύX]`ɂ͌_ɖ߂KvB

  ]郁\bh́AGraphicsNX̃TuNXł Graphics2DŎĂ̂ňȉ̗lɂB
  public void paint( Graphics g )
  {
    Graphics2D  g2 = (Graphics2D)g;    // Graphics2D`ɃLXg(^ϊ)Ărotategp\ƂȂ 
  }

  ]R[h͈ȉ̒ʂ 
  
  mapg     c `(wi)
  X,Y      c LN^W 
  CHARSIZE c LN^TCY(c^) 
  ROTATE90 c (90 * Math.PI / 180)  90x]Ӗ

  // Wn`悷LN^̒SWɐݒ   
  mapg.translate( X+(CHARSIZE/2), Y+(CHARSIZE/2) );

  // ݂̌_𒆐S90x] 
  mapg.rotate( ROTATE90 );

  // LN^`B A_SɂȂĂ̂ŔLN^}CiXW` 
  mapg.drawImage( LN^Image, -(CHARSIZE/2), -(CHARSIZE/2), CHARSIZE, CHARSIZE, this );

  // ]߂ 
  mapg.rotate( -ROTATE90 );

  // _W߂ 
  mapg.translate( -(X+(CHARSIZE/2)), -(Y+(CHARSIZE/2)) );


  ɂ߂ǂ
  LA(Docomo)ȂǂXvCgNXV݂̂悭܂B


EXbh
  Q[ȂǁAobNOEhłǂǂ񓮂Ȃ΂ȂȂAvł̓Xbh𐶐̂ʓIB
  Xbhɂ͂Qʂ@B
  EXbhNXp
  EXbhŃC^[tFCX

  JAVAł͂Qȏ̃NXp鎖͏oȂ߁AAppletNXpꍇ
  C^[tFCX邵I͂ȂB
  
  ThreadNX̃CX^X𐶐run\bhĂяo悤ɂȂ̂ŁA
  ̓Sleep(Nmsec)܂ރ[v쐬Ae܂B

  AeCxgXi[(L[{[h^}EX^ANV)Ȃǂ̓Cxg쓮Ȃ̂
  R[邩͕Ȃ̂ŁAXbhC[v̏Ƃ̓ɂ
  tB[h(NXϐ)ōsKv܂B
  
  ɁÃXbh𐶐ꍇ̓ThreadNX̃\bhł Notify()
  Wait()gpčsƂɂȂ܂B(pbN}͂PXbhȂ̂Ŗgpł)


EtHg^TCY^Z^O
  悭镶̒񂹂ɂāB

  TCYŒ̏ꍇ́A̕vẐ͗pӂv|[VitHg
  TCYRɕςꍇɉĂ͒PvZ킯ɂ͂ȂB

  TextLayoutCX^X𐶐ƁAw肵̕Ȃǂ擾鎖\ɂȂ܂B

  Z^Oj

  String str = "~";
	
  // VtHg쐬({[hC^bNŃTCY24|CgƂ) 
  Font newFont = useFont.deriveFont( Font.BOLD | Font.ITALIC, 24 );
	
  // eLXgCAEg擾(͂悭܂...) 
  TextLayout layout = new TextLayout( str, newFont, new FontRenderContext(new AffineTransform(),false,false) );
	
  // 񕝂R\[ɏo 
  System.out.print( ":" + (int)layout.getBounds().getWidth() + "\n" );

  // VtHgݒ 
  g.setFont( newFont );

  //
  // ` MAPXSIZE̐^񒆂 ̔̒` 
  //
  g.drawString( str, MAPXSIZE/2 - ((int)layout.getBounds().getWidth()/2), y );

  // ̃tHgɖ߂ 
  g.setFont( useFont );

  
